'''
selector 编写说明：
1. 继承 SelectStrategy 类
2. 重写 check 方法，返回 True 表示选中该股票
3. 选中股票的代码和日期会打印出来
'''

from lobobt.strategy import SelectStrategy
from lobobt.formula import *

# 继承 SelectStrategy, 并实现 onbar 方法进行选择
class Selector(SelectStrategy):

    def onbar(self) -> bool:
        return CLOSE > OPEN

# 如果指定 -d demo/demo.tsv 使用提供的数据文件作为测试数据，
# 我们可以从以下的打印结果看到确实从数据文件中加载了数据，并且计算列的结果也从测试文件中加载到了
print(f'{DATE=} {CODE=} {OPEN=} {CLOSE=} {HIGH=} {LOW=} {VOLUME=} {AMOUNT=}')
print(f'{MA(CLOSE, 5)=} {REF(CLOSE, 1)=} {REF(MA(CLOSE, 5), 1)=}')

codes = ['000001.sz']
'''
定义候选的股票列表，在本地调试模式下这个参数被忽略。 all sz sh bj 表示特定股票集，例如：
- 'all' 表示所有 A 股票
- 'sz' 表示深圳交易市场的所有股票
- ['sh', 'bj'] 表示上海和北京交易市场的所有股票
'''

dates = ['2022-01-01', '2022-01-02']
'''
定义要测试的日期列表，在本地调试模式下这个参数被忽略。
- 列表中元素可以是字符串表示的日期，例如 '2025-01-02'
- 也可以是数字形式的日期例如 20250102
- 也可以是一个表示日期范围的元组，例如 ('2025-01-01', '2025-01-10') 表示的日期范围
- 日期范围包括包括前后端两个日期，除非他们不是交易日
'''

selector = Selector()
'''创建一个选择器，用于选择要交易的股票'''

selector.run(codes, dates)